﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ComunesMGI.DataTypes;
using MGI.Logica;
using System.IO;
using ComunesMGI.Enum;

namespace WebServiceMGI
{
    public class MGIIncidentesWS : IMGIIncidentesWS
    {
        public List<DataCampo> GetCampos(int idSistema, Lista lista)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetCampos( idSistema, lista);
        }

        public DataAltaIncidente AddIncidente(DataSistema incidente)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.AddIncidente(incidente);
        }

        public List<DataIncidente> GetIncidentes(int idSistema)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetIncidentes(idSistema);
        }

        public List<DataIncidente> GetIncidentesAsignablesWP(int wkpCod) 
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetIncidentesAsignablesWP(wkpCod);
        }

        public List<DataTarea> GetTareas(int idSistema, int idIncidente) 
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetTareas(idSistema, idIncidente);
        }

        public bool AsignarResponsable(int idSistema, int idIncidente, DataTarea tarea, DataUsuario usuario) 
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.AsignarResponsable(idSistema, idIncidente, tarea, usuario);
        }

        public int AddWorkPackage(int idSistema, DataWP workPackage)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.AddWorkPackage(idSistema, workPackage);        
        }

        public List<DataWP> GetWorkPackages(int sisCod)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetWorkPackages(sisCod);
        }

        public void AsociarIncidentesWP(int idSistema, int idWorkPackage, List<int> incidentes) 
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes inc = logicaFactory.GetIIncidentes();
            inc.AsociarIncidentesWP(idSistema, idWorkPackage,incidentes);
        }


        public List<DataIncidenteReporte> GetIncidentesCerradosPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes inc = logicaFactory.GetIIncidentes();
            return inc.GetIncidentesCerradosPeriodo(sistemas, perFchIni, perFchFin);
        }

        public List<DataIncidenteReporte> GetIncidentesCreadosPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes inc = logicaFactory.GetIIncidentes();
            return inc.GetIncidentesCreadosPeriodo(sistemas, perFchIni, perFchFin);
        }


        public List<DataIncidente> GetIncidentesWP(int idSistema, int idWorkPackage)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes inc = logicaFactory.GetIIncidentes();
            return inc.GetIncidentesWP(idSistema, idWorkPackage);
        }

        public string UploadFile(Stream sourceStream)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.UploadFile(sourceStream);            
        }

        public bool AdjuntarArchivoIncidente(string nombreArchivo, int idSistema, int idIncidente, string nroTemp)
        { 
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.AdjuntarArchivoIncidente(nombreArchivo, idSistema, idIncidente, nroTemp);
        }    
              
        public DataAltaTarea AddTarea(int idSistema, int idIncidente, List<DataCampo> campos)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.AddTarea(idSistema, idIncidente, campos);
        }

        public List<DataEstadoWP> GetEstadosWP()
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.GetEstadosWP();
        }

        public List<DataIncidenteReporte> VisualizarIncidentesAsignados(List<int> sistema, string usuario, string campoFiltro, DateTime perFchIni, DateTime perFchFin) 
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.VisualizarIncidentesAsignados(sistema, usuario, campoFiltro, perFchIni, perFchFin);             
        }

        public bool ChkWpIncidentesOTareasSinCerrar(int wkpCod)
        { 
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            return incidentes.ChkWpIncidentesOTareasSinCerrar(wkpCod);
        }

        public void ModificarWP(DataWP wp, bool cerrarTodo)
        {
            LogicaFactory logicaFactory = LogicaFactory.GetInstance();
            IIncidentes incidentes = logicaFactory.GetIIncidentes();
            incidentes.ModificarWP(wp, cerrarTodo);
        }

    }
}
